#pragma once
#include <map>
#define RAX     0
#define EAX     1
#define AX      2
#define AH      3
#define AL      4
#define RBX     10
#define EBX     11
#define BX      12
#define BH      13
#define BL      14
#define RCX     20
#define ECX     21
#define CX      22
#define CH      23
#define CL      24
#define RDX     30
#define EDX     31
#define DX      32
#define DH      33
#define DL      34
#define RSI     40
#define ESI     41
#define SI      42
#define SIL     43
#define RDI     50
#define EDI     51
#define DI      52
#define DIL     53
#define RBP     60
#define EBP     61
#define BP      62
#define BPL     63
#define RSP     70
#define ESP     71
#define SP      72
#define SPL     73
#define R8      80
#define R8D     81
#define R8W     82
#define R8B     83
#define R9      90
#define R9D     91
#define R9W     92
#define R9B     93
#define R10     100
#define R10D    101
#define R10W    102
#define R10B    103
#define R11     110
#define R11D    111
#define R11W    112
#define R11B    113
#define R12     120
#define R12D    121
#define R12W    122
#define R12B    123
#define R13     130
#define R13D    131
#define R13W    132
#define R13B    133
#define R14     140
#define R14D    141
#define R14W    142
#define R14B    143
#define R15     150
#define R15D    151
#define R15W    152
#define R15B    153
#define RIP     160
#define EIP     161
#define IP      162
#define RFLAGS  170
#define EFLAGS  171
#define FLAGS   172

class REGISTER_INFO {
public:
    unsigned offset;
    unsigned length;
    inline REGISTER_INFO() = default;
    inline REGISTER_INFO(unsigned off, unsigned len) { this->offset = off; this->length = len; }
};
extern std::map<unsigned,REGISTER_INFO>regDef;
void Register_Information_Initialize();